Personal computers allow users to do an almost unlimited number of tasks. Examples of typical tasks include drafting term papers, resumes, and letters, organizing recipes and addresses, tracking personal checking accounts and stock portfolios, communicating via electronic mail with other computer users, generating blueprints for home improvements, and making electronic photo albums. To accomplish these and other tasks, the typical computer system includes application programs--specific sets of instructions--that work with other components of the computer system to provide specific functions, such as word processing. Application programs are often called software to distinguish from the physical equipment, or hardware, of a computer system.
More particularly, a typical computer system includes a processor, a memory, a set of user-interface devices, and a display. The processor generally performs the computations and other data manipulations for performing, or executing, the instructions of application programs. The memory, which may take a variety forms, such as a memory chip or a magnetic disk, stores the application programs as well as data generated using the programs. User-interface devices, such as a keyboard and mouse, allow a user to input information into the application programs. And, the display not only presents information visually but also allows the user to interact with the information through menus and other graphical interface features.
The typical computer system also includes an operating system--a special kind of software that facilitates execution of application programs. Application programs logically combine functions or services of the operating system with those of the central processor to achieve their more complex functions. Examples of typical operating-system functions include transferring data between the central processing unit and the memory, initial processing of inputs from the keyboard and mouse, converting information for presentation on the display, and launching application programs.
One problem of typical computer systems concerns the time typical computer systems require to launch, or start, application programs. Starting an application program generally entails retrieving the instructions making up the program from a permanent memory device, such as a magnetic or optical disk, and copying them into a temporary memory device before the processor begins executing the program instructions. The instructions are copied into a temporary memory device, such a random-access memory, because these devices are generally faster than typical permanent memory devices and allow the processor to more quickly fetch and execute individual program instructions.
As processors have gotten faster and more powerful in recent years, computer programmers and software developers have created larger and larger application programs which require not only more permanent and temporary memory space but also more time to retrieve and copy their program instructions from permanent to temporary memory before processors can begin executing the instructions. This ultimately means that users experience a noticeable wait before they can begin using launched application programs. Moreover, the wait is often increased because application programs are often broken up and stored as logically linked fragments of program code. The fragments are noncontiguous, or physically disconnected, and thus require more time to retrieve than a single continuous block of code.
One way to alleviate this problem is to ensure that programs are stored as continuous blocks of code. In fact, there are special application programs, known as defragmenters, which reorganize stored data by eliminating empty spaces between "chunks" or segments of stored data. Unfortunately, this only addresses part of the problem.
None of the defragmenters recognize, as the inventors do, that the problem can be further alleviated by storing frequently used application programs in portions of permanent memory devices that are faster to access than other portions of the memory devices. In other words, there are no defragmenters which reorganize memory content based on frequency of use. Indeed, there are no convenient ways of even monitoring or tracking how frequently application programs are accessed.
Accordingly, there is a particular need not only for convenient ways of monitoring or tracking how frequently application programs are used but also for defragmenters which consider frequency-of-use data to more intelligently reorganize memory contents.